package com.ruoyi.ebike.service.impl;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.ebike.mapper.EbikeUserMapper;
import com.ruoyi.ebike.domain.EbikeUser;
import com.ruoyi.ebike.service.IEbikeUserService;

/**
 * 用户信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-12-31
 */
@Service
public class EbikeUserServiceImpl implements IEbikeUserService 
{
    @Autowired
    private EbikeUserMapper ebikeUserMapper;

    /**
     * 查询用户信息
     * 
     * @param id 用户信息主键
     * @return 用户信息
     */
    @Override
    public EbikeUser selectEbikeUserById(Long id)
    {
        return ebikeUserMapper.selectEbikeUserById(id);
    }

    /**
     * 查询用户信息列表
     * 
     * @param ebikeUser 用户信息
     * @return 用户信息
     */
    @Override
    public List<EbikeUser> selectEbikeUserList(EbikeUser ebikeUser)
    {
        return ebikeUserMapper.selectEbikeUserList(ebikeUser);
    }

    /**
     * 新增用户信息
     * 
     * @param ebikeUser 用户信息
     * @return 结果
     */
    @Override
    public int insertEbikeUser(EbikeUser ebikeUser)
    {
        return ebikeUserMapper.insertEbikeUser(ebikeUser);
    }

    /**
     * 修改用户信息
     * 
     * @param ebikeUser 用户信息
     * @return 结果
     */
    @Override
    public int updateEbikeUser(EbikeUser ebikeUser)
    {
        return ebikeUserMapper.updateEbikeUser(ebikeUser);
    }

    /**
     * 批量删除用户信息
     * 
     * @param ids 需要删除的用户信息主键
     * @return 结果
     */
    @Override
    public int deleteEbikeUserByIds(Long[] ids)
    {
        return ebikeUserMapper.deleteEbikeUserByIds(ids);
    }

    /**
     * 删除用户信息信息
     * 
     * @param id 用户信息主键
     * @return 结果
     */
    @Override
    public int deleteEbikeUserById(Long id)
    {
        return ebikeUserMapper.deleteEbikeUserById(id);
    }

    @Override
    public int updateEbikeUserRealInfo(EbikeUser ebikeUser) {
        return ebikeUserMapper.updateEbikeUserRealInfo(ebikeUser);
    }

    public Map<String, BigDecimal> getEbikeUserCount(String timeRange) {
        LocalDateTime startTime, endTime;
        switch (timeRange) {
            case "today":
                startTime = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
                endTime = startTime.plusDays(1);
                break;
            case "allTime":
                startTime = LocalDateTime.of(2024, Month.JANUARY, 1, 0, 0);
                endTime = LocalDateTime.now();
                break;
            default:
                throw new IllegalArgumentException("Invalid time range: " + timeRange);
        }

        BigDecimal orderCount = Optional.ofNullable(ebikeUserMapper.calculateEbikeUserCount(startTime, endTime)).orElse(BigDecimal.ZERO);

        Map<String, BigDecimal> stats = new HashMap<>();
        stats.put("count", orderCount);
        return stats;
    }
}
